Filter
✒️ 2025-05-26 09:14 내용 수정
HTTP 요청과 응답을 변경할 수 있는 재사용 클래스
- 참고 자료 : tutorialspoint JSP - Filters, 책 읽는 개발자_테드's JSP 필터(filter)란
- 클라이언트가 백엔드에 존재하는 리소스에 접근하기 전에 request를 번역하거나, 서버가 클라이언트에게 response를 회답하기 전에 response를 수정하기 위해 사용한다.
- 인증 관련 필터, 데이터 압축 필터, 암호화 필터, 리소스 접근 이벤트를 발동하는 필터, 이미지 변환 필터 등 여러 목적으로 사용된다.
- Servlet에서 request 처리 전후에 자주 사용하는 부분을 Filter로 작성하여 사용할 수 있다.
- 필터는 javax.servlet.Filter 인터페이스를 구현하여 만들 수 있다.
| 메서드 | 설명 |
|---|---|
doFilter(ServletRequest request, ServletResponse response, FilterChain chain) |
Container에 의해 호출됨. 필터의 기능을 수행함 |
init(FilterConfig filterConfig) |
필터 초기화. 필터의 서비스가 시작되면 호출됨 |
destroy() |
필터의 자원을 반납. 필터의 서비스가 끝나면 호출됨 |
- 또 다시 원인 불명의 에러때문에 작동을 확인하지 못했다.
- 404 error, server module 시도해도 실패
- https://october-east-sea.tistory.com/160 에 모든 방법 시도해도 실패
- 톰캣 자체 문제일수도..
- 요청된 리소스가 가용하지 않음으로 해결했다.
package Test;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
@WebFilter("/test")
public class TestFilter implements Filter{
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 1. 전처리 작업
long startTime = System.currentTimeMillis();
// 2. Servlet 호출
chain.doFilter(request, response);
// 3. 후처리 작업
System.out.println("[" + ((HttpServletRequest)request).getRequestURI() + "]");
System.out.println("Servlet 작업 소요 시간 : " + (System.currentTimeMillis() - startTime));
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("TestFilter가 호출됨");
}
}
package Test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
@WebServlet("/test")
public class StringPrint extends HttpServlet{
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
String str = "가나다라마바사";
PrintWriter pw = res.getWriter();
for(int i = 0; i < 10; i++) {
pw.println(str.repeat(i));
}
pw.println("Servlet 수행 종료");
}
}